package cn.com.nes.common.util.id;

import cn.hutool.core.util.ObjectUtil;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 业务id生成工具类
 *
 * @author lux
 * @date 2019-03-18 15:23
 */
public class AgentIdUtils {

    /**
     * 生成业务id,
     * <p/>
     * 以毫微秒做基础计数, 返回唯一有序增长ID
     *
     * @param em 业务id规则
     * @return 业务id
     */
    public static String createID(AgentIdEnum em) {
        if (ObjectUtil.isNull(em)) {
            return IdUtils.getIncreaseIdByCurrentTimeMillis();
        }
        return em.getKey() + IdUtils.getIncreaseIdByNanoTime();
    }

    /**
     * 生成顺序号,规则为业务id前缀+当前年月日+4位顺序号
     *
     * @param em 业务id规则
     * @param sequence 顺序号
     * @return
     */
    public static String createID(AgentIdEnum em, Integer sequence) {
        if (ObjectUtil.isNotNull(em) && ObjectUtil.isNotNull(sequence)) {
            //获取当前年月日
            SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
            String currentDate = format.format(new Date(System.currentTimeMillis()));
            DecimalFormat decimalFormat = new DecimalFormat("00000000");
            //去掉前缀下划线
            String prefix = em.getKey().substring(0, em.getKey().length() - 1);
            return prefix + currentDate + decimalFormat.format(sequence);
        } else {
            return createID(em);
        }

    }

    public static void main(String[] args) {
        System.out.println(createID(AgentIdEnum._capply));
    }

}
